1. Field of the Invention
The present invention generally relates to cache resources for computer systems.
2. Description of the Related Art
Caches must be populated with data before they can begin to offload data accesses from slower devices. This involves copying data from the slower device being cached into the higher speed cache device. Typically this involves a read operation from the slower device followed by a write to the cache device. Since the main intent of high speed caching devices is to offload the slower mass storage devices, most caching algorithms attempt to minimize I/O requests to the slower mass storage devices.
Traditional caches copy the data to the cache device during the processing of an input/output request to the slower device. This approach may be termed “opportunistic/synchronous” population, since it takes advantage of the opportunity afforded by the existing input/output request to copy the data without having to perform an additional read request to the device being cached. Unfortunately this “opportunistic” approach introduces extra processing on the input/output request since the data cannot be released to the origin of the input/output request until the copy has been completed, in effect synchronizing the act of copying the data for the purposes of populating the cache and the processing of an input/output request. Furthermore this type of “opportunistic” cache population can be complicated by performance optimizations that coalesce non-adjacent input/output requests by creating scatter/gather lists that discard portions of the data represented by the input/output request. In environments that perform this type of optimization the “opportunistic/synchronous” cache population algorithms must inspect the memory buffers associated with all outstanding input/output requests to ensure there are no overlapping regions that could corrupt the data being copied to populate the cache.
General definitions for terms utilized in the pertinent art are set forth below.
Application Programming Interface (API) is a collection of computer software code, usually a set of class definitions, that can perform a set of related complex tasks, but has a limited set of controls that may be manipulated by other software-code entities. The set of controls is deliberately limited for the sake of clarity and ease of use, so that programmers do not have to work with the detail contained within the given API itself.
“Cache” refers to the memory in which data is stored in order to make the data more readily and speedily accessible, transparently. When a cache is exhausted, it is flushed of data, to be replaced with the next cache according to a replacement algorithm.
“Cached data” is data in cache memory duplicating original values stored elsewhere (such as the hard disk) on a computer.
“Cache hit” refers to when the processor looks for data in cache memory and finds the data. A cache hit places less strain on input/output (I/O) resources and limited network resources.
“Cache miss” refers to when the processor looks for data in cache memory and finds that it is not there, resulting in having to read from the main memory or hard disk. Data retrieved during a cache miss is often written into the cache in anticipation of further need for it.
“Caching resources” refers to the physical or virtual components of limited availability required for caches or the process of caching, such as memory or a processing unit.
“Cloud computing” is generally defined as using computing resources, primarily servers, owned by a third party provider (such as the AMAZON ELASTIC COMPUTE CLOUD, JOYENT, and GOOGLE APPS) such that the user does not need to make a substantial investment in computer hardware and scale resources depending on the user's needs. Cloud computing primarily involves Web applications but can include storage, raw computing and other specialized services.
Compatibility library is a software program that provides an interface between computer programs, and in particular an interface that provides an interface between a proprietary environment and an open source or GNU GPL device driver that provides the supporting functionality for the device driver.
“Data center” is a centralized location where computing resources (such as, host computers, servers, applications, databases, or network access) critical to an organization are maintained in a highly controlled physical environment.
Device driver is a software program that allows a hardware device to interact with software installed on the hardware device.
“Execution environments” refers to operating systems or virtual machines in which executable programs are executed. When a computer program is executed, or running, a process is created.
Function pointer is a programming language data type that invokes a function in a computer memory.
GNU, General Public License is a license for an open source operating system based on UNIX, which requires that derived works be distributed under the same license terms.
Hypervisor is a hardware virtualization technique that allows a computer to host multiple operating systems by providing a guest operating system with a virtual operating platform.
Kernel is a component of an operating system that connects a computer's software applications to the computer's hardware.
“Load balancing” refers to distributing workload across multiple computers, central processing units, or other resources, to achieve optimal resource utilization, maximize throughput, minimize response time, and avoid overload.
“Logical unit number” or “LUN” is an identification number given to logical units (devices) connected to a SCSI “Small Computer System Interface” adapter; typically, the logical disks in a storage area network (SAN).
“Mass storage devices” refers to removable or non-removable media that can store large amounts of data, such as tape drives, redundant array of independent disks (RAID), magnetic disks, or flash drives.
“Non-volatile caching device” refers to a storage device that can retain data within memory even when the device is not powered on, such as a flash drive.
“Open source software” or “OSS” refers to computer software that is available with open access to the source code (design and implementation), which is typically free.
“Process identifier”, “process ID”, or “PID” is a number used by operating systems (OS) to uniquely identify a process, an OS object that consists of an executable program, a set of virtual memory addresses, and one or more threads. When a program runs, a process is created.
Semaphore is an abstract data type that provides an abstraction for controlling access to a common resource in a parallel programming environment by multiple processes.
“Virtualization” refers to a computer software/hardware platform that allows running several operating systems simultaneously on the same computer. VMware vSphere Hypervisor™ (ESXi) is an example of a hardware virtualization product.
“Virtualized environment” refers to hypervisor, or virtualization, systems.
Virtual Machine is a software abstraction of a physical computer.
“Web-Browser” is a complex software program, resident in a client computer, that is capable of loading and displaying text and images and exhibiting behaviors as encoded in HTML (HyperText Markup Language) from the Internet, and also from the client computer's memory. Major browsers include MICROSOFT INTERNET EXPLORER, NETSCAPE, APPLE SAFARI, MOZILLA FIREFOX, and OPERA.
“Web-Server” is a computer able to simultaneously manage many Internet information-exchange processes at the same time. Normally, server computers are more powerful than client computers, and are administratively and/or geographically centralized. An interactive-form information-collection process generally is controlled from a server computer.
Data within computing environments may be cached to high speed devices to improve performance. The majority of data is stored on mass storage devices (i.e. disk drives and disk arrays) and transferred to caches devices on an as needed basis. The placement of data within the high speed device is referred to as population of the cache and requires the transfer of data from the slower device being cached to the high speed device. The transfer of data to the high speed devices may create extra load on the slower device being cached and/or add overhead (extra work or delays not directly related to satisfying the input/output request) to the fetching of data.